<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 5.3.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"example.com","root":"/","scheme":"Muse","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
  </script>

  <meta name="description" content="sk_buff介绍sk_bufffragment - frag_list, and frags array clone - struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)  skb-&gt;cloned is set to 1 in both the clone and the original buffer skb-&amp;">
<meta property="og:type" content="article">
<meta property="og:title" content="sk_buff简介">
<meta property="og:url" content="http://example.com/2021/01/09/sk-buff/index.html">
<meta property="og:site_name" content="解救Z先生">
<meta property="og:description" content="sk_buff介绍sk_bufffragment - frag_list, and frags array clone - struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)  skb-&gt;cloned is set to 1 in both the clone and the original buffer skb-&amp;">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2021-01-09T08:33:03.000Z">
<meta property="article:modified_time" content="2021-01-09T14:19:18.508Z">
<meta property="article:author" content="greentree">
<meta property="article:tag" content="linux">
<meta name="twitter:card" content="summary">

<link rel="canonical" href="http://example.com/2021/01/09/sk-buff/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-CN'
  };
</script>

  <title>sk_buff简介 | 解救Z先生</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">解救Z先生</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="main-menu menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>

  </li>
        <li class="menu-item menu-item-about">

    <a href="/aboutme/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a>

  </li>
  </ul>
</nav>




</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
    <link itemprop="mainEntityOfPage" href="http://example.com/2021/01/09/sk-buff/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="greentree">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="解救Z先生">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          sk_buff简介
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-calendar"></i>
              </span>
              <span class="post-meta-item-text">发表于</span>
              

              <time title="创建时间：2021-01-09 16:33:03 / 修改时间：22:19:18" itemprop="dateCreated datePublished" datetime="2021-01-09T16:33:03+08:00">2021-01-09</time>
            </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <h1 id="sk-buff介绍"><a href="#sk-buff介绍" class="headerlink" title="sk_buff介绍"></a>sk_buff介绍</h1><h6 id="sk-buff"><a href="#sk-buff" class="headerlink" title="sk_buff"></a>sk_buff</h6><p><strong>fragment</strong> - frag_list, and frags array</p>
<p><strong>clone</strong> - struct sk_buff *<strong>skb_clone</strong>(struct sk_buff *skb, gfp_t gfp_mask)</p>
<ol>
<li>skb-&gt;cloned is set to 1 in both the clone and the original buffer</li>
<li>skb-&gt;users is set to in the clone, so that the first attempt to remove it succeeds</li>
<li>the number of reference(dataref) to the buffer containing  the data is incremented, since now there is one more sk_buff data structure pointing to it.</li>
<li><strong>When a buffer is cloned, the content of the data block cannot be modified!</strong></li>
</ol>
<p><strong>pskb-copy</strong> - user can modify only the contents of the data in the area between skb-&gt;start and skb-end</p>
<p><strong>skb-copy</strong> - user can modify the content of the fragment data blocks too.</p>
<h6 id="sk-buff-queue"><a href="#sk-buff-queue" class="headerlink" title="sk_buff queue"></a>sk_buff queue</h6><p>all functions must be atomically, that is, they must grab the spin lock provided by the sk_buff_head structure for the queue. Otherwiese, they could be interrupted by asynchronous events that enqueue or dequeue elements from the queues, such as functions invoked by expired timers, which would lead to race conditions.</p>
<h6 id="mem-cache"><a href="#mem-cache" class="headerlink" title="mem_cache_"></a>mem_cache_</h6><h6 id="fclone-2"><a href="#fclone-2" class="headerlink" title="fclone:2"></a>fclone:2</h6><table>
<thead>
<tr>
<th>fclone</th>
<th>描述</th>
</tr>
</thead>
<tbody><tr>
<td>SKB_FCLONE_UNAVAILABLE</td>
<td>/* skb has no fclone (from head_cache) */</td>
</tr>
<tr>
<td>SKB_FCLONE_ORIG</td>
<td>/* orig skb (from fclone_cache) */</td>
</tr>
<tr>
<td>SKB_FCLONE_CLONE</td>
<td>/* companion fclone skb (from fclone_cache) */</td>
</tr>
</tbody></table>
<h6 id="skb-init"><a href="#skb-init" class="headerlink" title="skb_init"></a>skb_init</h6><p>这一对SKB是父子关系，指向同一个数据缓存区，引用计数值为0，1或2，用来表示这一对SKB中有几个已被使用。</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">sk_buff_fclones</span> &#123;</span></span><br><span class="line">	<span class="class"><span class="keyword">struct</span> <span class="title">sk_buff</span>	<span class="title">skb1</span>;</span></span><br><span class="line">	<span class="class"><span class="keyword">struct</span> <span class="title">sk_buff</span>	<span class="title">skb2</span>;</span></span><br><span class="line">	<span class="keyword">refcount_t</span>	fclone_ref; </span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> __init <span class="title">skb_init</span><span class="params">(<span class="keyword">void</span>)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">	skbuff_head_cache = kmem_cache_create_usercopy(<span class="string">&quot;skbuff_head_cache&quot;</span>,</span><br><span class="line">					      <span class="keyword">sizeof</span>(struct sk_buff),</span><br><span class="line">					      <span class="number">0</span>,</span><br><span class="line">					      SLAB_HWCACHE_ALIGN|SLAB_PANIC,</span><br><span class="line">					      offsetof(struct sk_buff, cb),</span><br><span class="line">					      sizeof_field(struct sk_buff, cb),</span><br><span class="line">					      <span class="literal">NULL</span>);</span><br><span class="line">	skbuff_fclone_cache = kmem_cache_create(<span class="string">&quot;skbuff_fclone_cache&quot;</span>,</span><br><span class="line">						<span class="keyword">sizeof</span>(struct sk_buff_fclones),</span><br><span class="line">						<span class="number">0</span>,</span><br><span class="line">						SLAB_HWCACHE_ALIGN|SLAB_PANIC,</span><br><span class="line">						<span class="literal">NULL</span>);</span><br><span class="line">	skb_extensions_init();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

    </div>

    
    
    

      <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/linux/" rel="tag"># linux</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/2021/01/09/linux%E5%86%85%E6%A0%B8%E7%BD%91%E7%BB%9C%E8%B0%83%E4%BC%98%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E/" rel="prev" title="linux内核网络调优参数说明">
      <i class="fa fa-chevron-left"></i> linux内核网络调优参数说明
    </a></div>
      <div class="post-nav-item">
    <a href="/2021/01/09/%E8%87%AA%E6%97%8B%E9%94%81spin-lock%E5%92%8Craw-spin-lock/" rel="next" title="自旋锁spin_lock和raw_spin_lock">
      自旋锁spin_lock和raw_spin_lock <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#sk-buff%E4%BB%8B%E7%BB%8D"><span class="nav-number">1.</span> <span class="nav-text">sk_buff介绍</span></a><ol class="nav-child"><li class="nav-item nav-level-6"><a class="nav-link" href="#sk-buff"><span class="nav-number">1.0.0.0.0.1.</span> <span class="nav-text">sk_buff</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#sk-buff-queue"><span class="nav-number">1.0.0.0.0.2.</span> <span class="nav-text">sk_buff queue</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#mem-cache"><span class="nav-number">1.0.0.0.0.3.</span> <span class="nav-text">mem_cache_</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#fclone-2"><span class="nav-number">1.0.0.0.0.4.</span> <span class="nav-text">fclone:2</span></a></li><li class="nav-item nav-level-6"><a class="nav-link" href="#skb-init"><span class="nav-number">1.0.0.0.0.5.</span> <span class="nav-text">skb_init</span></a></li></ol></li></ol></li></ol></li></ol></li></ol></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">greentree</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">13</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-tags">
        <span class="site-state-item-count">3</span>
        <span class="site-state-item-name">标签</span>
      </div>
  </nav>
</div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">greentree</span>
</div>
  <div class="powered-by">由 <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> & <a href="https://muse.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a> 强力驱动
  </div>

        








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/muse.js"></script>


<script src="/js/next-boot.js"></script>




  















  

  

</body>
</html>
